package com.lcz.authority.admin.mapper;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.lcz.authority.common.core.mybatis.BaseMapperX;
import com.lcz.authority.common.domain.entity.SysUserRoleEntity;
import org.apache.ibatis.annotations.Param;

/**
 * @author lcz
 * @desc 用户角色映射器
 * @mail lcz_0130@163.com
 * @date 2024/05/06
 */

public interface SysUserRoleMapper extends BaseMapperX<SysUserRoleEntity> {

    /**
     * 通过用户ID删除用户和角色关联
     *
     * @param userId 用户ID
     * @return 结果
     */
    default int deleteUserRoleByUserId(String userId) {
        return delete(new QueryWrapper<SysUserRoleEntity>()
                .eq("user_id", userId));
    }

    /**
     * 删除用户和角色关联信息
     *
     * @param userRole 用户和角色关联信息
     * @return 结果
     */
    default int deleteUserRoleInfo(SysUserRoleEntity userRole) {
        return delete(new QueryWrapper<SysUserRoleEntity>()
                .eq("user_id", userRole.getUserId())
                .eq("role_id", userRole.getRoleId()));
    }

    /**
     * 批量取消授权用户角色
     *
     * @param roleId  角色ID
     * @param userIds 需要删除的用户数据ID
     * @return 结果
     */
    default int deleteUserRoleInfos(@Param("roleId") String roleId, @Param("userIds") String[] userIds) {
        return delete(new QueryWrapper<SysUserRoleEntity>()
                .eq("role_id", roleId)
                .in("user_id", userIds));
    }

    /**
     * 通过角色ID查询角色使用数量
     *
     * @param roleId 角色ID
     * @return 结果
     */
    default int countUserRoleByRoleId(String roleId) {

        return selectCount("role_id", roleId).intValue();
    }
}
